package done.easy_101_200;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import java.util.*;

/**
 * 118. Pascal's Triangle
 * <p>
 * Example:
 * Input: 5
 * Output: [[1],
 * [1,1],
 * [1,2,1],
 * [1,3,3,1],
 * [1,4,6,4,1]]
 * 解决方案：
 * 双层列表，第一层 i 代表行，第二层 j 代表列。
 * <p>
 * 1) j 的数组长度等于 i + 1
 * 2) nums[i][j] = nums[i-1][j] + nums[i-1][j-1]
 * <p>
 * [j] -> 0  1  2  3  4      [i]
 * [1],              <- 0
 * [1, 1],           <- 1
 * [1, 2, 1],        <- 2
 * [1, 3, 3, 1],     <- 3
 * [1, 4, 6, 4, 1]   <- 4
 * <p>
 * 2019-03-23 10:59 PM
 **/
@Slf4j
public class PascalsTriangle {

    @SuppressWarnings("all")
    public List<List<Integer>> generate(int numRows) {
        // 190411 first
        return null;
    }

    @Test
    public void test() {
        generate(6).forEach(
                li -> log.info("{}", li)
        );
    }
}




























/*
public List<List<Integer>> generate(int numRows) {
    // 结果集是双层列表
    List<List<Integer>> listSet = new ArrayList<>();

    if (numRows == 0) {
        return listSet;
    }

    // 第一行特殊只有一个元素, 直接加上
    List<Integer> l = new ArrayList<>();
    l.add(1);
    listSet.add(l);

    // NO.1 行循环
    for (int i=1; i<numRows; i++) {
        // NO.1.1 每一行以 1 开头
        listSet.add(new ArrayList<>());
        listSet.get(i).add(1);

        // NO.2 行内元素循环
        for (int j=1; j<i; j++) {
            // NO.3 上一行的 j 和 j-1 位置
            listSet.get(i).add(
                 listSet.get(i-1).get(j) + listSet.get(i-1).get(j-1));
        }
        // NO.1.1 每一行以 1 结尾
        listSet.get(i).add(1);
    }
    return listSet;
}
*/
